import deviceInfo from '@ohos.deviceInfo';
// https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fcrypto-js 插件地址
import CryptoJS from '@ohos/crypto-js'

export function md5(input: string): string {
  // return CryptoJS.MD5(input).toString(CryptoJS.enc.Hex);
  return CryptoJS.MD5(input)
}

/**
 * 生成 32 位随机字符串
 * @returns - 随机的 32 位十六进制字符串
 */
export function generateNonce(): string {
  // 使用 CryptoJS 生成 16 字节的随机值
  const randomWords = CryptoJS.lib.WordArray.random(16); // 16 字节 = 128 位
  // 转换为 32 位十六进制字符串
  return randomWords.toString(CryptoJS.enc.Hex); // 返回 32 位的十六进制字符串
}


/**
 * 生成请求头中的签名和 nonce
 * @param url - 请求的 URL
 * @param authToken - 授权令牌
 * @param body - 提交的 body 参数（可以是加密的或原始的）
 * @returns - 签名和 nonce 对象
 */
export function generateSignature(url: string, authToken: string, body: string): { signature: string, nonce: string } {
  const nonce = generateNonce(); // 生成 32 位随机字符串作为 nonce
  const bodyMd5 = md5(body); // 计算 body 的 MD5 哈希值
  const signatureString = url + authToken + bodyMd5 + nonce; // 拼接字符串
  const signature = md5(signatureString); // 计算最终的签名

  return {
    signature,
    nonce
  };
}

// 获取设备ID
export function genphoneudid() {
  try {
    const deviceId: string = deviceInfo.udid; // 获取设备ID
    console.log(`设备ID: ${deviceId}`);
    return deviceId;
  } catch (error) {
    console.error(`获取设备ID失败: ${(error as Error).message}`);
    return '';
  }
}
